
package educar.abmAsignacionDoc;

import educar.controllers.PrincipalController;
import educar.db.JPA;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;


    
public class AsignacionController implements ActionListener,MouseListener, WindowListener {
            
    private PrincipalController principalController;
    private AsignacionView asignacionView;

// <editor-fold defaultstate="collapsed" desc="Constructor">
    public AsignacionController(PrincipalController principalControl){ 
        principalController = principalControl;
        asignacionView = new AsignacionView();
        asignacionView.setActionListener(this);
        asignacionView.setMouseListener(this);
        asignacionView.setWindowListener(this);
    }
 // </editor-fold>

// <editor-fold defaultstate="collapsed" desc="Action setView">    
    public void setView() {
        Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
        int x = 0;
        int y = 50;
        asignacionView.setBounds(x, y, screen.width, (screen.height)-90);
        asignacionView.setModeloTabla(listarAsignacion());
        asignacionView.setVisible(true);
    }
// </editor-fold>    

// <editor-fold defaultstate="collapsed" desc="Metodos ActionPermormed">    
    @Override
    public void actionPerformed(ActionEvent e) {
        Object source = e.getSource();
        if (asignacionView.getJbAgregar() == source) {
                AgregarAsignacionController agreAsignacionController = new AgregarAsignacionController(this);
                agreAsignacionController.setView();
        }
        
       if (asignacionView.getJbEliminar() == source) {
            EliminarAsignacionController eliminarAsignacionController = new EliminarAsignacionController();
            eliminarAsignacionController.eliminarRegistro(asignacionView.getModeloTabla());
         
        
        if (asignacionView.getJbBuscar() == source) {
            asignacionView.setModeloTabla(null);
            if (asignacionView.getCriterios()[0].isEmpty() && asignacionView.getCriterios()[1].isEmpty()){
                asignacionView.setModeloTabla(listarAsignacion());
            }
            if (!(asignacionView.getCriterios()[0].isEmpty()) && asignacionView.getCriterios()[1].isEmpty()){
                asignacionView.setModeloTabla(buscarAsignacionByColumn("DNIdocente", asignacionView.getCriterios()[0]));
            }
           
            if (!(asignacionView.getCriterios()[0].isEmpty()) && !(asignacionView.getCriterios()[1].isEmpty())){
                asignacionView.setModeloTabla(buscarAsignacionByKeys(asignacionView.getCriterios()));
            }
        }
     }
    }
    

    @Override
    public void mouseClicked(MouseEvent e) {
        Object source = e.getSource();
        if ((asignacionView.getJTable1() == source) && (e.getClickCount()==2)) {
            ModificarAsignacionController modificarAsignacioncontroller = new ModificarAsignacionController(this);
            int fila = asignacionView.getJTable1().getSelectedRow();
            Vector registro = (Vector) (asignacionView.getModeloTabla().getDataVector()).elementAt(fila);
            modificarAsignacioncontroller.setView(registro, fila);
            }    
   }
// </editor-fold>

// <editor-fold defaultstate="collapsed" desc="Metodos auxiliares usados">    
    public void agregarATabla(String[] item){
        Object[] vector = new Object[3];
        vector[0] = (boolean) false;
        for (int i = 1; i < 3; i++){
            vector[i] = item[i-1];
        }
        asignacionView.getModeloTabla().addRow(vector);
    }

    public void actualizarFila(String[] item, int fila){
        asignacionView.getModeloTabla().setValueAt(false, fila, 0);
        for (int i = 1; i < 3; i++){
            asignacionView.getModeloTabla().setValueAt(item[i-1], fila, i);
        }
    }
    
     /**
     * listarAsignacion(): Lista todas las posibles asignaciones de la base de datos en la tabla
     * 
     * @return DefaultTableModel la tabla con todas las asignaciones
     */
    public DefaultTableModel listarAsignacion() {
            JPA jpa = new JPA();
            Object[] vector = new Object[5];
            DefaultTableModel tabla = (DefaultTableModel) asignacionView.getJTable1().getModel(); 
            ResultSet res = jpa.showAll("asignado");
            
            try {
                while (res.next()) {
                    vector[0] = false;
                    vector[1] = res.getObject(1);
                    vector[2] = res.getObject(2);
                     tabla.addRow(vector);
                }
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
            return tabla;
    }
    
    public DefaultTableModel buscarAsignacionByColumn(String column, String criterio) {
        JPA jpa = new JPA();
        Object[] vector = new Object[3];
        DefaultTableModel tabla = (DefaultTableModel) asignacionView.getModeloTabla(); 
        ResultSet res = jpa.getByField("asignado", column, criterio);
        
        try {
            while (res.next()) {
                vector[0] = false;
                vector[1] = res.getObject(1);
                vector[2] = res.getObject(2);
                tabla.addRow(vector);
            }
         } catch (SQLException ex) {
            ex.printStackTrace();
         }
         return tabla;       
    }
        
    public DefaultTableModel buscarAsignacionByKeys(String[] keysCriterio) {
        JPA jpa = new JPA();
        Object[] vector = new Object[5];
        DefaultTableModel tabla = (DefaultTableModel) asignacionView.getModeloTabla();
        String[] keys = {"DNIdocente", "codMateria"};
        ResultSet res = jpa.getByKeys("asignado", keys, keysCriterio);
        
        
        try {
            while (res.next()) {
                vector[0] = false;
                vector[1] = res.getObject(1);
                vector[2] = res.getObject(2);             
                tabla.addRow(vector);
            }
         } catch (SQLException ex) {
            ex.printStackTrace();
         }
         return tabla;        
    }
        
    @Override
    public void windowClosing(WindowEvent e) {
            principalController.setView();
    }
    
// </editor-fold>    
    
// <editor-fold defaultstate="collapsed" desc="Metodos ActionPerformed no usadas"> 
    @Override
    public void mousePressed(MouseEvent e) {
    }

    @Override
    public void mouseReleased(MouseEvent e) {
    }

    @Override
    public void mouseEntered(MouseEvent e) {

    }

    @Override
    public void mouseExited(MouseEvent e) {
    }

    @Override
    public void windowOpened(WindowEvent e) {
    }

    @Override
    public void windowClosed(WindowEvent e) {
    }

    @Override
    public void windowIconified(WindowEvent e) {
    }

    @Override
    public void windowDeiconified(WindowEvent e) {
    }

    @Override
    public void windowActivated(WindowEvent e) {
    }

    @Override
    public void windowDeactivated(WindowEvent e) {
    }
// </editor-fold>    
    
}
